package com.cgx.tablet.beeper.glide;

import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.request.RequestOptions;
import com.cgx.tablet.beeper.R;
import com.cgx.tablet.beeper.utils.ImgUtils;

import jp.wasabeef.glide.transformations.RoundedCornersTransformation;

/**
 * 加载网络或者本地图片的ImageView
 * Created by admin on 2016/11/4.
 */
public class GlideImageView extends AppCompatImageView {

    protected RequestManager glide;
    protected ColorDrawable defaultDrawable;
    protected ActivityManager activityManager;

    public GlideImageView(Context context) {
        super(context);
        init(context);
    }

    public GlideImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public GlideImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        glide = Glide.with(context);
        defaultDrawable = new ColorDrawable(ContextCompat.getColor(context, R.color.mainBackgroundColor));
        activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    }

    /**
     * 普通加载
     *
     * @param url 网络URL或者本地地址
     */
    public void load(String url) {
        RequestOptions options = new RequestOptions()
                .placeholder(defaultDrawable)
                .error(defaultDrawable)
                .dontAnimate();
        glide.load(ImgUtils.getRealUrl(url)).apply(options).into(this);
    }

    /**
     * 普通加载
     *
     * @param url           网络URL或者本地地址
     * @param placeHolderId 占位图资源ID
     * @param errorResId    错误图资源ID
     */
    public void load(String url, int placeHolderId, int errorResId) {
        RequestOptions options = new RequestOptions()
                .placeholder(placeHolderId)
                .error(errorResId)
                .dontAnimate();

        glide.load(url).apply(options).into(this);
    }


    /**
     * 加载头像
     *
     * @param url 网络URL
     *            dontAnimate(). 移除所有的动画。
     *            placeholder(int resourceId). 设置资源加载过程中的占位Drawable。
     *            into(ImageView view). 设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。
     */
    public void loadAvatar(String url) {
        RequestOptions options = RequestOptions.circleCropTransform()
                .placeholder(R.mipmap.ic_avatar)
                .error(R.mipmap.ic_avatar)
                .format(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? activityManager.isLowRamDevice() ? DecodeFormat.PREFER_RGB_565 : DecodeFormat.PREFER_ARGB_8888 : DecodeFormat.PREFER_RGB_565)
                .dontAnimate();

        glide.load(ImgUtils.getRealUrl(url)).apply(options).into(this);
    }
    /**
     * 加载头像
     *
     * @param bitmap Bitmap图片
     *            dontAnimate(). 移除所有的动画。
     *            placeholder(int resourceId). 设置资源加载过程中的占位Drawable。
     *            into(ImageView view). 设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。
     */
    public void loadAvatar(Bitmap bitmap) {
        RequestOptions options = RequestOptions.circleCropTransform()
                .placeholder(R.mipmap.ic_avatar)
                .error(R.mipmap.ic_avatar)
                .format(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? activityManager.isLowRamDevice() ? DecodeFormat.PREFER_RGB_565 : DecodeFormat.PREFER_ARGB_8888 : DecodeFormat.PREFER_RGB_565)
                .dontAnimate();

        glide.load(bitmap).apply(options).into(this);
    }

    /**
     * 加载圆形图片
     *
     * @param url 网络URL或者本地地址
     */
    public void loadRound(String url) {
        RequestOptions options = RequestOptions.circleCropTransform()
                .placeholder(R.mipmap.ic_avatar)
                .error(R.mipmap.ic_avatar)
                .dontAnimate();
        glide.load(url).apply(options).into(this);
    }

    public void loadRound(String url, int placeHolderId, int errorResId) {
        RequestOptions options = RequestOptions.circleCropTransform()
                .placeholder(placeHolderId)
                .error(errorResId)
                .dontAnimate();
        glide.load(url).apply(options).into(this);
    }

    /**
     * 加载圆角图片
     *
     * @param url    网络URL或者本地地址
     * @param radius 半径
     * @param margin 边距
     */
    public void loadRoundCorner(String url, int radius, int margin) {
        RequestOptions options = RequestOptions.bitmapTransform(new RoundedCornersTransformation(radius, margin))
                .placeholder(defaultDrawable)
                .error(defaultDrawable)
                .dontAnimate()
                .centerCrop();
        glide.load(url).apply(options).into(this);
    }

    public void loadRoundCorner(String url, int radius, int margin, int placeHolderId, int errorResId) {
        RequestOptions options = RequestOptions.bitmapTransform(new RoundedCornersTransformation(radius, margin))
                .placeholder(placeHolderId)
                .error(errorResId)
                .dontAnimate()
                .centerCrop();
        glide.load(url).apply(options).into(this);
    }

}
